package com.atguigu.gmall.realtime.app.functions;

import com.atguigu.gmall.realtime.utils.KeywordUtil;
import org.apache.flink.table.annotation.DataTypeHint;
import org.apache.flink.table.annotation.FunctionHint;
import org.apache.flink.table.functions.TableFunction;
import org.apache.flink.types.Row;

import java.util.List;

/**
 * @Description: dws层搜索关键字主题 自定义udtf, 实现分词效果
 * @Author: tiancy
 * @Create: 2021/12/10
 */


/*
    TableFunction<Row> : 指定当前类的返回值类型.
    @FunctionHint(output = @DataTypeHint("ROW<s STRING>")) ==> 指定当前类返回值,就是指定具体的列.这里只需要一列,就是关键字列.
    需要指定一个具体的方法,并且方法的名称必须是`envl()`
 */

@FunctionHint(output = @DataTypeHint("ROW<str STRING>"))
public class KeywordUDTF extends TableFunction<Row> {
    public void eval(String text) {
        List<String> keywordList = KeywordUtil.analyze(text); // 调用当前我们自己定义的分词工具类,对SQL函数传入的字符串,进行一个分词操作.
        for (String keyword : keywordList) {
            Row row = new Row(1);
            row.setField(0, keyword);
            collect(row);
        }
    }
}
